//
//  HMOAuthViewController.swift
//  Weibo
//
//  Created by itteacher on 2017/7/23.
//  Copyright © 2017年 itteacher. All rights reserved.
//

import UIKit
import SVProgressHUD

//  新浪微博表示应用的唯一id
let AppKey = "1898991786"
//  AppSecret是app秘钥
let AppSecret = "c205ff9c6e657c13b1e59ea7b10086f7"
//  授权成功回调地址
let Redirect_uri = "http://www.itcast.cn"
//  OAuth登录界面
class HMOAuthViewController: UIViewController {

    //  懒加载控件
    private lazy var webView: UIWebView = UIWebView()
    
    //  重写loadView,自定义控制器的视图
    override func loadView() {
        //  设置代理
        webView.delegate = self
        view = webView
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.white
        setupNavUI()
        loadLogin()
    }
    
    //  设置导航栏按钮
    private func setupNavUI() {
        //  左侧导航栏按钮
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "取消", target: self, action: #selector(cancelAction))
        //  设置标题
        navigationItem.title = "微博登录"
        //  右侧导航栏按钮
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: #selector(autoFillAction))
    }
    
    //  加载第三方登录
    func loadLogin() {
        //  请求地址
        let urlStr = "https://api.weibo.com/oauth2/authorize?client_id=\(AppKey)&redirect_uri=\(Redirect_uri)"
        print(urlStr)
        //  创建url对象
        let url = URL(string: urlStr)
        //  加载web页面
        webView.loadRequest(URLRequest(url: url!))
    }
    
    //  MARK: --导航栏按钮点击事件处理
    @objc private func cancelAction() {
        self.dismiss(animated: true, completion: nil)
    }

    @objc private func autoFillAction() {
        
        webView.stringByEvaluatingJavaScript(from: "document.getElementById('userId').value = 'hao123guohaibin@163.com';document.getElementById('passwd').value = 'guohaibin123';document.getElementById('passwd').focus();")
    }
   
    
}

//  MARK: --   UIWebViewDelegate
extension HMOAuthViewController: UIWebViewDelegate {
    
    //  将要加载网络请求
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        print(request.url?.absoluteString)
        if request.url?.absoluteString.hasPrefix(Redirect_uri) == true {
            //  代码执行到此，表示是以授权回调地址开头
            //  query: 表示url?后面的参数，
            if let query = request.url?.query, query.hasPrefix("code=") {
                //  表示使我们需要的授权码参数
                //  截取授权码字符串
                let code = query.substring(from: "code=".endIndex)
                //  通过code授权码获取accessToken
//                requestAccessToken(code: code)
                
                HMUserAccountViewModel.sharedViewModel.requestAccessToken(code: code, callBack: { (isSuccess: Bool) in
                    if isSuccess {
                        //  登录成功
                        print("登录成功")
                        //  注意点： 需要让当前OAuthVCdismis完成以后再去切换根视图控制器，否则MainVC没有释放
                        self.dismiss(animated: false, completion: { 
                            //  进入欢迎页面
                            //  切换根视图控制器
                            NotificationCenter.default.post(name: NSNotification.Name(SwitchRootVCNotificationName), object: self)
                        })
                        
                    } else {
                        //  登录失败
                        print("登录失败")
                    }
                })
            } else {
                //  取消授权
                self.dismiss(animated: true, completion: nil)
            }
            //  如果是false会执行加载失败的方法
            return false
        }
        //  true: 运行加载这次请求地址，false: 不允许加载这次请求地址
        return true
    }
    //  已经开始加载请求
    func webViewDidStartLoad(_ webView: UIWebView) {
        SVProgressHUD.show()
    }
    //  加载完成
    func webViewDidFinishLoad(_ webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    //  加载失败
    func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
        //  如果是false会执行加载失败的方法
        SVProgressHUD.dismiss()
    }
    

}
